package com.apikey.auth.service;

import com.apikey.auth.entity.Application;
import com.apikey.auth.entity.ApiKey;

/**
 * 申请审核服务接口
 * 提供申请审核相关的业务逻辑
 *
 * @author API Key Framework
 * @version 1.0
 */
public interface ReviewService {

    /**
     * 审核申请 - 通过
     *
     * @param applicationId 申请ID
     * @param reviewer      审核人
     * @param remark        审核备注
     * @return 审核后的申请记录
     */
    Application approveApplication(Long applicationId, String reviewer, String remark);

    /**
     * 审核申请 - 拒绝
     *
     * @param applicationId 申请ID
     * @param reviewer      审核人
     * @param remark        拒绝原因
     * @return 审核后的申请记录
     */
    Application rejectApplication(Long applicationId, String reviewer, String remark);

    /**
     * 为通过的申请生成API Key
     *
     * @param application 申请记录
     * @return 生成的API Key
     */
    ApiKey generateApiKeyForApplication(Application application);

    /**
     * 验证申请是否可以审核
     *
     * @param applicationId 申请ID
     * @throws IllegalStateException 申请状态不允许审核时抛出
     */
    void validateApplicationForReview(Long applicationId);

    /**
     * 验证审核参数
     *
     * @param applicationId 申请ID
     * @param reviewer      审核人
     * @param remark        审核备注
     * @throws IllegalArgumentException 参数验证失败时抛出
     */
    void validateReviewParams(Long applicationId, String reviewer, String remark);
}